/**
 * 
 */
package junior.util.aop.annotation;

import java.lang.annotation.Annotation;
import java.util.List;

import org.aopalliance.intercept.MethodInvocation;

/**
 * @author bo.wu
 * @CreateDate 2015年7月17日
 */
public interface AnnotationInvoker {
	/**
	 * 得到支持的Annotation
	 * @return
	 */
	Class<? extends Annotation>[] getSupportAnnotations();
	/**
	 * Annotation的指定属性（或者叫方法）是否支持Spring表达式
	 * @param a
	 * @param name
	 * @return
	 */
	boolean isSupportsSpel(Annotation a, String name);
	/**
	 * 方法调用拦截器
	 * @param mi
	 * @param annoCtxes
	 * @return
	 */
	Object invoke(MethodInvocation mi, List<AnnotationContext> annoCtxes) throws Throwable;
}
